package com.example.springboot.context;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * 用来初始化bean的属性
 * <p> 在初始化bean的时候会执行的方法。
 * 这个扩展点的触发时机在 {@link BeanPostProcessor#postProcessAfterInitialization} 之前
 *
 * <p> PostConstruct 或 InitializingBean.afterPropertiesSet
 *
 * <p>场景： 用户实现InitializingBean接口，来进行系统启动的时候一些业务指标的初始化工作（校验属性、建立连接、初始化缓存）
 *
 * @author Zhang.Z
 * @version 2025-09-21
 */
@Configuration
public class Test9InitializingBean implements InitializingBean {

    /**
     * @see InitializingBean#afterPropertiesSet 前执行。
     * <p> 如果对一个方法标注了@PostConstruct
     */
    @PostConstruct
    public void init() {
        System.out.println("test9 postConstruct");
    }


    /**
     * 与 PostConstruct 相似，只是接口方式，更依赖 Spring
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        //设置属性
        System.out.println("test9 init bean set prop");
    }
}
